<?php
namespace core\models;
/**
 * Token令牌处理
 * @package core\models
 * @author  ZhouHaoHua <53027327@qq.com>
 */

class Token{

    /**
     * 存放初始化后的对象
     * @var array
     */
    private static $_obj = [];

    /**
     * JWT授权令牌
     * [code]
     * $token = \core\models\Token::JWT();
     * $exp_date = strtotime(date('Y-m-d H:i:s') . ' +' . $token->token_life_time . ' seconds'); //过期时间
     * $payload = [
     *     'iss' => 'lvmeimei', //签发者
     *     'iat' => $_SERVER['REQUEST_TIME'], //什么时候签发的
     *     'exp' => $exp_date,//过期时间
     *     'api_uid' => $userinfo['uaa_id'],//自定义信息
     *     'api_company_id' => $userinfo['uaa_company_id'] //自定义信息
     * ];
     * // 生成授权码
     * echo $token->encode($payload,$token->key);
     *
     * // 解析授权码，不合规则或者过期返回false
     * $token->decode($token_str,$token->key);
     * [/code]
     * @return Token_Jwt
     * @author 李文凯 <1275124829@163.com>
     */
    public static function JWT(){
        if (isset(self::$_obj['jwt']) && is_object(self::$_obj['jwt'])) {

        } else {
            self::$_obj['jwt'] = new Token_Jwt();
        }
        return self::$_obj['jwt'];
    }

    /**
     * Token令牌处理
     * 主要用于防止表单重复提交，注意此类依赖session。并且如果session的写入速度慢于数据提交速度的话会有漏网的！
     * 用法：
     * [code]
     * $O = \core\models\Token::Md5();
     * //生成
     * $token_str = $O->setToken(); //此值放到表单隐藏域tokenHide
     * //表单提交时
     * if($O->validToken($_POST['tokenHide'])){
     *      //这里写具体数据提交代码
     * }
     * [/code]
     * @package core\models
     * @author  ZhouHaoHua <53027327@qq.com>
     */
    public static function Md5(){
        if (isset(self::$_obj['md5']) && is_object(self::$_obj['md5'])) {

        } else {
            self::$_obj['md5'] = new Token_Md5();
        }
        return self::$_obj['md5'];
    }
}